/**
 * 主界面左侧的设备树菜单
 * 根据json数据生成树
 */

DeviceTree = {}
var treeObj = "";
DeviceTree.createTree = function (id, type) {
	this.updateMap = {};
	this.filterParams = {updateNode: false, filter: false}; //过滤条件
	this.treeManager = $("#" + id);
	this.load(false, type);
	var me = this;

}

var setting = {
	check: {
		enable: true
	},
	data: {
		simpleData: {
			enable: true
		}, key: {
			title: "simNo"
		}
	}, callback: {
		onCheck: onCheck,
	}, view: {
		showTitle: false,
		fontCss: setHighlight // 高亮一定要设置，setHighlight是自定义方法
	}
};

function onCheck(e, treeId, treeNode) {
	var zTree = $.fn.zTree.getZTreeObj("deviceTree"), nodes = zTree.getCheckedNodes(true);
	var parentSims = "";
	if (nodes && nodes.length) {
		for (var i = 0, len = nodes.length; i < len; i++) {
			var node = nodes[i];
			if (typeof (node.children) == "undefined" && node.id.indexOf("v") == 0) {
				nodeSim = node.simNo;
				parentSims += nodeSim + ",";
				//alert(node.data.text);
			}
		}
		if (parentSims != "") {
			parentSims = parentSims.substring(0, parentSims.length - 1);
		}
		$("#parentSims").val(parentSims);
		var simNo = $("#simNo").val();
		var params = {simNo: simNo, parentSims: parentSims};
		$("#bindDataGrid").datagrid('load', params);

	} else {
		$("#parentSims").val("");
		var simNo = $("#simNo").val();
		var params = {simNo: simNo, parentSims: ""};
		$("#bindDataGrid").datagrid('load', params);
	}

}


DeviceTree.load = function (isUpdate, type) {
	if (isUpdate == false)
		this.updateMap = {};
	var me = this;
	var treeManager = this.treeManager;
	var url = path + "/message/getDeviceTree";
	//var params = {updateNode:update};
	this.filterParams.updateNode = isUpdate;
	this.filterParams.type = type;
	var filter = false;
	$.ajax({
		type: "POST",
		url: url,
		data: this.filterParams,
		error: function () {
			//alert("网络连接错误，无法读取数据!");
			//Utility.done();
		},
		success: function (data) {
			//登录超时
			if (data.logoutFlag) {
				window.top.location = path + "/login";
				return false;
			}
			//console.info(eval(data.TreeDataIndex));
			if (isUpdate == false) {
				me.initializeCallback(data); //填充到树中，生成设备数
			} else {
				var nodeData = data.UpdateTreeDataIndex;
				var zTree = $.fn.zTree.getZTreeObj("deviceTree");
				for (var i = 0; i < nodeData.length; i++) {
					var node = zTree.getNodeByParam("id", nodeData[i].id, null);
					node.name = nodeData[i].name;
					node.icon = nodeData[i].icon;
					zTree.updateNode(node);
				}
				//zTree.reAsyncChildNodes(null, "refresh");
			}
			//$("#spanOnlineUserNum").html(onlineInfo.onlineUserNum);
			//me.manager.setData(treeData);
			var treeObj = $.fn.zTree.getZTreeObj("deviceTree");
			var nodes = treeObj.getNodes();
			if (nodes.length > 0) {
				for (var i = 0; i < nodes.length; i++) {
					treeObj.expandNode(nodes[i], true, false, false);
				}
			}
		}
	});

}


/**
 * 用于在获取数据后，填充设备树
 */
DeviceTree.initializeCallback = function (data) {
	var treeRightMenu = this.treeManagerRightMenu;

	treeObj = $.fn.zTree.init($("#deviceTree"), setting, data.TreeDataIndex);

}

DeviceTree.getSelectNode = function () {
	var treeObj = $.fn.zTree.getZTreeObj("deviceTree");
	var sNodes = treeObj.getSelectedNodes();
	var node;
	if (sNodes.length > 0) {
		node = sNodes[0];
	}

	return node;
}


// 有输入后定时执行一次，如果上次的输入还没有被执行，那么就取消上一次的执行
var timeoutId = null;
DeviceTree.Treefilter = function (filterType, value) {
	if (value == null || $.trim(value) == "") {
		$.iMessager.alert('提示', '请输入查询内容', 'messager-warning');
	}
	if (timeoutId) {
		clearTimeout(timeoutId);
	}
	timeoutId = setTimeout(function () {
		searchNode(filterType, value);
	}, 500);

}

//精确搜索
function searchNode(filterType, value) {
	if (value == "") return;

	//搜索设备号
	if (filterType == 0) {
		// 获取与value匹配的节点，使用的ztreeAPI getNodesByParam
		var nodes = treeObj.getNodesByParam("simNo", $.trim(value));
		if (nodes.length > 0) {
			for (var i = 0; i < nodes.length; i++) {
				if (nodes[i].id.indexOf("v") == 0) {
					treeObj.selectNode(nodes[i]);
					break;
				}
			}
		} else {
			treeObj.cancelSelectedNode();
		}
	}
	//搜索显示名称
	if (filterType == 1) {
		// 获取与value匹配的节点，使用的ztreeAPI getNodesByParam
		var nodes = treeObj.getNodesByParamFuzzy("name", $.trim(value));
		if (nodes.length > 0) {
			for (var i = 0; i < nodes.length; i++) {
				if (nodes[i].id.indexOf("v") == 0) {
					treeObj.selectNode(nodes[i]);
					break;
				}
			}
		} else {
			treeObj.cancelSelectedNode();
		}
	}
	//搜索分组
	if (filterType == 2) {
		// 获取与value匹配的节点，使用的ztreeAPI getNodesByParamFuzzy
		var nodes = treeObj.getNodesByParamFuzzy("name", $.trim(value));
		if (nodes.length > 0) {
			for (var i = 0; i < nodes.length; i++) {
				if (nodes[i].id.indexOf("dep") == 0) {
					treeObj.selectNode(nodes[i]);
					break;
				}
			}
		} else {
			treeObj.cancelSelectedNode();
		}
	}

}


// 模糊搜索name满足条件的节点
/*function searchNode(filterType, value) {
 if (value == "") return;
 // 获取与value匹配的节点，使用的ztreeAPI getNodesByParamFuzzy
 var nodes = treeObj.getNodesByParamFuzzy("name", value);

 // 关闭所有节点的高亮
 // 使用API transformToArray获取所有的节点，getNodes()只能获得根节点，属性children也只能获取下一级节点
 var allNodes = treeObj.transformToArray(treeObj.getNodes());

 for (var i = 0; i < allNodes.length; i++) {


 if (filterType == 0) {
 if (!allNodes[i].isParent) {
 // 关闭高亮是利用节点属性highlight来控制fontCss实现的
 // 需要配合setting.view中设置的fontCss使用，后面代码会说
 allNodes[i].highlight = false;
 // 更新节点，因为hightlight改变了，使用updateNode可以更新节点
 treeObj.updateNode(allNodes[i]);
 }

 }
 //搜索分组
 if (filterType == 1) {
 if (allNodes[i].isParent) {
 // 关闭高亮是利用节点属性highlight来控制fontCss实现的
 // 需要配合setting.view中设置的fontCss使用，后面代码会说
 allNodes[i].highlight = false;
 // 更新节点，因为hightlight改变了，使用updateNode可以更新节点
 treeObj.updateNode(allNodes[i]);
 }

 }

 }
 // 先关闭所有节点
 //treeObj.expandAll(false);

 // 高亮并展开搜索到的节点
 for (var i = 0; i < nodes.length; i++) {
 //搜索北斗卡号
 if (filterType == 0) {
 if (!nodes[i].isParent) {
 nodes[i].highlight = true;
 treeObj.updateNode(nodes[i]); // 更新节点，让高亮生效
 // 展开根节点（如果不展开根节点，下面的节点无法展开，不知道是不是bug）
 treeObj.expandNode(treeObj.getNodes()[0], true);

 // 展开搜索到的节点的父节点
 treeObj.expandNode(nodes[i].getParentNode(), true);
 } else {
 nodes[i].highlight = false;
 treeObj.updateNode(nodes[i]);
 }

 }
 //搜索分组
 if (filterType == 1) {
 if (nodes[i].isParent) {
 nodes[i].highlight = true;
 treeObj.updateNode(nodes[i]); // 更新节点，让高亮生效

 // 展开根节点（如果不展开根节点，下面的节点无法展开，不知道是不是bug）
 treeObj.expandNode(treeObj.getNodes()[0], true);

 // 展开搜索到的节点的父节点
 treeObj.expandNode(nodes[i].getParentNode(), true);
 } else {
 nodes[i].highlight = false;
 treeObj.updateNode(nodes[i]);
 }

 }

 }
 }*/


// 设置高亮字体
function setHighlight(treeId, treeNode) {
	return (!!treeNode.highlight) ? {color: "#A60000", "font-weight": "bold"} : {
		color: "#333",
		"font-weight": "normal"
	};
}